home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / saf / impl / SimpleSchemaAdjunct.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  5.4 KB  |  182 lines

  1. package com.extensibility.saf.impl;
  2.  
  3. import com.extensibility.saf.AdjunctException;
  4. import com.extensibility.saf.Association;
  5. import com.extensibility.saf.MetaSchema;
  6. import com.extensibility.saf.SchemaAdjunct;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.Enumeration;
  10. import java.util.Hashtable;
  11. import java.util.Properties;
  12. import javax.xml.parsers.DocumentBuilder;
  13. import javax.xml.parsers.DocumentBuilderFactory;
  14. import javax.xml.parsers.ParserConfigurationException;
  15. import org.w3c.dom.Attr;
  16. import org.w3c.dom.Document;
  17. import org.w3c.dom.Element;
  18. import org.w3c.dom.Node;
  19. import org.w3c.dom.NodeList;
  20. import org.xml.sax.EntityResolver;
  21. import org.xml.sax.SAXException;
  22.  
  23. public class SimpleSchemaAdjunct implements SchemaAdjunct, Tags {
  24.    protected MetaSchema metaSchema;
  25.    protected Hashtable associationMap;
  26.    protected String target;
  27.  
  28.    public SimpleSchemaAdjunct(Document var1, MetaSchema var2) {
  29.       this.init(var1, var2);
  30.    }
  31.  
  32.    public SimpleSchemaAdjunct(String var1, MetaSchema var2) {
  33.       this.associationMap = new Hashtable();
  34.       this.target = var1;
  35.       this.metaSchema = var2;
  36.    }
  37.  
  38.    public SimpleSchemaAdjunct(File var1, EntityResolver var2, MetaSchema var3) throws SAXException, IOException {
  39.       try {
  40.          DocumentBuilderFactory var4 = DocumentBuilderFactory.newInstance();
  41.          var4.setValidating(false);
  42.          DocumentBuilder var5 = var4.newDocumentBuilder();
  43.          if (var2 != null) {
  44.             var5.setEntityResolver(var2);
  45.          }
  46.  
  47.          Document var6 = var5.parse(var1);
  48.          this.init(var6, var3);
  49.       } catch (ParserConfigurationException var7) {
  50.          ((Throwable)var7).printStackTrace();
  51.          System.exit(1);
  52.       }
  53.  
  54.    }
  55.  
  56.    private void init(Document var1, MetaSchema var2) {
  57.       this.metaSchema = var2;
  58.       this.associationMap = new Hashtable();
  59.       this.target = var1.getDocumentElement().getAttribute("target");
  60.       this.gatherAssociations(var1, "document", 0);
  61.       this.gatherAssociations(var1, "element", 1);
  62.       this.gatherAssociations(var1, "attribute", 2);
  63.    }
  64.  
  65.    public String getTarget() {
  66.       return this.target;
  67.    }
  68.  
  69.    public MetaSchema getMetaSchema() {
  70.       return this.metaSchema;
  71.    }
  72.  
  73.    public Association[] getAssociations() {
  74.       Association[] var1 = new Association[this.associationMap.size()];
  75.       Enumeration var2 = this.associationMap.keys();
  76.  
  77.       for(int var3 = 0; var3 < this.associationMap.size(); ++var3) {
  78.          var1[var3] = (Association)this.associationMap.get(var2.nextElement());
  79.       }
  80.  
  81.       return var1;
  82.    }
  83.  
  84.    public Association[] getAssociations(String var1) {
  85.       Association var2 = (Association)this.associationMap.get(var1);
  86.       if (var2 == null) {
  87.          return new Association[0];
  88.       } else {
  89.          Association[] var3 = new Association[]{var2};
  90.          return var3;
  91.       }
  92.    }
  93.  
  94.    public Association[] getAssociations(Element var1) {
  95.       return this.getAssociations(var1.getNodeName());
  96.    }
  97.  
  98.    public Association[] getAssociations(Element var1, Attr var2) {
  99.       return this.getAssociations(String.valueOf(String.valueOf(var1.getNodeName()).concat(String.valueOf("/@"))).concat(String.valueOf(var2.getNodeName())));
  100.    }
  101.  
  102.    public String getProperty(String var1, String var2) {
  103.       return this.getProperty(this.getAssociations(var1), var2);
  104.    }
  105.  
  106.    public String getProperty(Element var1, String var2) {
  107.       return this.getProperty(this.getAssociations(var1), var2);
  108.    }
  109.  
  110.    public String getProperty(Element var1, Attr var2, String var3) {
  111.       return this.getProperty(this.getAssociations(var1, var2), var3);
  112.    }
  113.  
  114.    protected String getProperty(Association[] var1, String var2) {
  115.       return var1.length == 0 ? null : var1[0].getProperty(var2);
  116.    }
  117.  
  118.    protected void gatherAssociations(Document var1, String var2, int var3) {
  119.       NodeList var4 = var1.getElementsByTagName(var2);
  120.  
  121.       for(int var5 = 0; var5 < var4.getLength(); ++var5) {
  122.          Node var6 = var4.item(var5);
  123.          String var7;
  124.          if (var3 == 0) {
  125.             var7 = "/";
  126.          } else {
  127.             var7 = ((Element)var6).getAttribute("which");
  128.          }
  129.  
  130.          Properties var8 = this.gatherProperties(var6);
  131.          SimpleAssociation var9 = new SimpleAssociation(this, var3, var7, var8);
  132.          this.associationMap.put(var7, var9);
  133.       }
  134.  
  135.    }
  136.  
  137.    protected Properties gatherProperties(Node var1) {
  138.       Properties var2 = new Properties();
  139.  
  140.       for(Node var3 = var1.getFirstChild(); var3 != null; var3 = var3.getNextSibling()) {
  141.          if (var3 instanceof Element) {
  142.             ((Hashtable)var2).put(var3.getNodeName(), this.gatherText(var3));
  143.          }
  144.       }
  145.  
  146.       return var2;
  147.    }
  148.  
  149.    protected String gatherText(Node var1) {
  150.       StringBuffer var2 = new StringBuffer();
  151.  
  152.       for(Node var3 = var1.getFirstChild(); var3 != null; var3 = var3.getNextSibling()) {
  153.          var2.append(var3.getNodeValue());
  154.       }
  155.  
  156.       return var2.toString();
  157.    }
  158.  
  159.    public Association createAssociation(int var1, String var2) {
  160.       if (var1 == 0) {
  161.          var2 = "/";
  162.       }
  163.  
  164.       Properties var3 = new Properties();
  165.       SimpleAssociation var4 = new SimpleAssociation(this, var1, var2, var3);
  166.       if (this.associationMap.get(var2) != null) {
  167.          throw new AdjunctException("can't add duplicate selector");
  168.       } else {
  169.          this.associationMap.put(var2, var4);
  170.          return var4;
  171.       }
  172.    }
  173.  
  174.    public void removeAssociation(Association var1) {
  175.       this.associationMap.remove(var1.getSelector());
  176.    }
  177.  
  178.    public Document getDocument() {
  179.       return null;
  180.    }
  181. }
  182.